# @author: Yxinmiracle
# @project: Python_w
# @file: getOther.py
# @time: 2020/5/17 8:44

from urllib.parse import urljoin
import os
import requests
import re
from shixiseng.config import WOFF_FILE_NAME, XML_NAME, HOST, headers, font_dict
from fontTools.ttLib import TTFont
from xml.dom.minidom import parse  # 解析xml文件


def get_font_file():  # 获取字体文件的url，访问并下载在当前文件目录
    if os.path.exists(WOFF_FILE_NAME):
        os.remove(WOFF_FILE_NAME)
        os.remove(XML_NAME)

    get_fonts_url = "https://www.shixiseng.com/interns?page=1&keyword=Python&type=intern&area=&months=&days=&degree=&official=&enterprise=&salary=-0&publishTime=&sortType=&city=%E6%B7%B1%E5%9C%B3&internExtend="
    fonts_html = requests.get(url=get_fonts_url, headers=headers)
    fonts_url_str = re.findall('font-face {    font-family: myFont;    src: url(.*?);', fonts_html.text)[0][1:-1]
    fonts_url = urljoin(HOST, fonts_url_str)

    fonts_content = requests.get(fonts_url, headers=headers).content
    with open(WOFF_FILE_NAME, "wb") as fp:
        fp.write(fonts_content)


def get_glyph_dict():  # 最终得到的（例子）{'uni30': (0, 410), 'uni31': (-888, 0), 'uni32': (-942, 0), 'uni33': (159, -123), 'uni34': (-198, 0), 'uni35': (156, -102), 'uni36': (-121, 62), 'uni37': (-606, -1481), 'uni38': (-277, 129), 'uni39': (128, -74), 'uni41': (-221, 0), 'uni42': (0, 1549), 'uni43': (-171, -90), 'uni44': (0, 1549), 'uni45': (-833, 0), 'uni46': (-598, 0), 'uni47': (-232, -132), 'uni48': (-200, 0), 'uni49': (-149, 0), 'uni4E00': (1988, 0), 'uni4E09': (1676, 0), 'uni4E2A': (182, 0), 'uni4E8C': (1632, 0), 'uni4E92': (1355, 0), 'uni4E94': (466, 0), 'uni4EBA': (872, 504), 'uni4EF6': (694, 0), 'uni4F1A': (290, -258), 'uni4F5C': (266, 364), 'uni4a': (0, -281), 'uni4b': (-274, 0), 'uni4c': (-817, 0), 'uni4d': (0, 1026), 'uni4e': (-237, 0), 'uni4f': (0, 375), 'uni50': (0, -579), 'uni51': (-73, -23), 'uni52': (-236, 0), 'uni524D': (-152, 0), 'uni53': (71, -62), 'uni54': (-447, 0), 'uni544A': (1422, 0), 'uni5468': (0, -508), 'uni55': (0, -657), 'uni56': (-569, -1549), 'uni56DB': (1722, 0), 'uni57': (-434, -1549), 'uni573A': (-780, 0), 'uni58': (-243, 0), 'uni59': (-510, -979), 'uni5929': (749, 319), 'uni5DE5': (876, 0), 'uni5E02': (-156, 0), 'uni5E08': (-148, 0), 'uni5E74': (322, 0), 'uni5E7F': (797, 0), 'uni5a': (-893, -1312), 'uni61': (165, 103), 'uni62': (0, -156), 'uni62DB': (1068, 0), 'uni63': (-127, -76), 'uni64': (-196, 0), 'uni65': (-774, 0), 'uni653F': (156, -52), 'uni66': (-55, 29), 'uni67': (0, -614), 'uni6708': (-45, -386), 'uni68': (-195, 0), 'uni69': (0, 52), 'uni6a': (0, 52), 'uni6b': (-267, 0), 'uni6c': (0, 1637), 'uni6d': (-196, 0), 'uni6e': (-195, 0), 'uni6f': (0, 274), 'uni70': (0, -665), 'uni71': (-196, 0), 'uni72': (-49, 35), 'uni73': (148, -107), 'uni74': (-64, -35), 'uni75': (-197, 0), 'uni751F': (928, 0), 'uni76': (-438, -1106), 'uni77': (-330, -1106), 'uni78': (-370, -557), 'uni79': (-502, -1273), 'uni7A0B': (992, 0), 'uni7AEF': (1294, 0), 'uni7F51': (118, 62), 'uni7a': (-918, 0), 'uni8054': (76, 12), 'uni8058': (62, 10), 'uni884C': (1266, 0), 'uni8BA1': (582, 0), 'uni8BBE': (0, 138), 'uni8D22': (610, 0), 'uni8F6F': (244, 0), 'uni94F6': (102, -116)}
    fonts = TTFont(WOFF_FILE_NAME)
    fonts.saveXML(XML_NAME)

    glyph_dict = {}
    for i in fonts.getGlyphNames()[1:-1]:
        x1, y1 = fonts["glyf"][i].coordinates[0][0], fonts["glyf"][i].coordinates[0][1]
        x2, y2 = fonts["glyf"][i].coordinates[1][0], fonts["glyf"][i].coordinates[1][1]
        new = (x2 - x1, y2 - y1)
        glyph_dict[i] = new
        # print(i, new)

    #print("in get_glyph_dict---->", glyph_dict)
    return glyph_dict


def get_xml_dict():  # 最终得到的（例子）：{'&#x78': 'x', '&#xe004': 'uni6708', '&#xe05c': 'uni73', '&#xe080': 'uni4EF6', '&#xe0e0': 'uni75', '&#xe1b3': 'uni70', '&#xe1d1': 'uni4e', '&#xe1e4': 'uni6b', '&#xe1fc': 'uni58', '&#xe20b': 'uni79', '&#xe238': 'uni63', '&#xe26b': 'uni68', '&#xe280': 'uni55', '&#xe281': 'uni72', '&#xe392': 'uni77', '&#xe394': 'uni51', '&#xe3ab': 'uni524D', '&#xe3db': 'uni4E00', '&#xe40f': 'uni50', '&#xe41c': 'uni5E7F', '&#xe440': 'uni66', '&#xe446': 'uni45', '&#xe47e': 'uni42', '&#xe4c2': 'uni4E8C', '&#xe50c': 'uni4E94', '&#xe53f': 'uni6e', '&#xe583': 'uni32', '&#xe5b1': 'uni48', '&#xe661': 'uni6c', '&#xe671': 'uni4E2A', '&#xe674': 'uni7a', '&#xe69e': 'uni62DB', '&#xe6a9': 'uni34', '&#xe728': 'uni5E02', '&#xe780': 'uni52', '&#xe7a3': 'uni6d', '&#xe7bf': 'uni6a', '&#xe80d': 'uni39', '&#xe879': 'uni65', '&#xe8aa': 'uni43', '&#xe9d9': 'uni59', '&#xeaac': 'uni47', '&#xeb0b': 'uni5929', '&#xebd1': 'uni4f', '&#xebd4': 'uni7A0B', '&#xec24': 'uni44', '&#xec36': 'uni33', '&#xec45': 'uni62', '&#xece3': 'uni8058', '&#xed17': 'uni49', '&#xed37': 'uni76', '&#xed62': 'uni8D22', '&#xede3': 'uni53', '&#xee15': 'uni41', '&#xee39': 'uni5DE5', '&#xee91': 'uni6f', '&#xee9b': 'uni69', '&#xeee3': 'uni56DB', '&#xeef5': 'uni4EBA', '&#xef36': 'uni653F', '&#xef84': 'uni37', '&#xef85': 'uni64', '&#xefc3': 'uni4c', '&#xf028': 'uni38', '&#xf030': 'uni56', '&#xf08c': 'uni5E74', '&#xf0ce': 'uni5468', '&#xf0e2': 'uni884C', '&#xf13d': 'uni31', '&#xf1b9': 'uni573A', '&#xf21d': 'uni4b', '&#xf22b': 'uni4a', '&#xf248': 'uni4d', '&#xf298': 'uni35', '&#xf29c': 'uni61', '&#xf373': 'uni57', '&#xf3cf': 'uni7F51', '&#xf455': 'uni8F6F', '&#xf468': 'uni8054', '&#xf4f7': 'uni94F6', '&#xf50b': 'uni8BBE', '&#xf5d8': 'uni751F', '&#xf5f0': 'uni74', '&#xf644': 'uni71', '&#xf646': 'uni78', '&#xf658': 'uni4F1A', '&#xf6b3': 'uni4F5C', '&#xf6dd': 'uni5E08', '&#xf759': 'uni5a', '&#xf77a': 'uni54', '&#xf7a5': 'uni544A', '&#xf7a9': 'uni4E92', '&#xf7b4': 'uni7AEF', '&#xf7bf': 'uni36', '&#xf83b': 'uni4E09', '&#xf86f': 'uni67', '&#xf872': 'uni46', '&#xf8aa': 'uni30', '&#xf8ed': 'uni8BA1'}
    """
    本接口是解析xml文件的
    """
    dom = parse(XML_NAME)  # 解析xml文件

    # 获取文档元素对象
    data = dom.documentElement

    # 获取 map中code值
    stus = data.getElementsByTagName('cmap_format_4')[0]  # 得到第一个TagName为cmap_format_4的dom
    maps = stus.getElementsByTagName('map')  # 得到里面所有的TagName为map的dom
    xml_dict = {}  # 创建一个字典，构建map中code和name的对应关系，并且code会被替换为网页中所用的格式
    for map in maps:
        xml_dict[map.getAttribute("code").replace("0x", "&#x")] = map.getAttribute("name")

    #print("in get_xml_dict---->", xml_dict)
    return xml_dict
